/*
===========================================================================
This source file is part of DyLab (Dynamic Laboratory)
For the latest info, see http://dylab.googlecode.com

Copyright (c) 2006-2008 Lukas Krejci
(krejci.lukas@volny.cz)

This file is part of DyLab.

    DyLab is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    DyLab is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with DyLab.  If not, see <http://www.gnu.org/licenses/>.
===========================================================================
*/

#ifndef __dylab_Console_h__
#define __dylab_Console_h__

//===========================================================================================
#include <dylab/utils/String.h>

//===========================================================================================
#ifdef DYLAB_PLATFORM_WINDOWS
#   define DYLAB_CONSOLE_HANDLE void*
#else
#   error "Only Windows platform is supported so far."
#endif

//===========================================================================================
namespace dylab {

    /** 
     * 
     */    
    class DYLAB_EXPORT Console
    {
    private:
        //
        DYLAB_CONSOLE_HANDLE mConsoleHandle;

    public:

        /**
         * creates the console
         */
        Console(const String & title, bool showConsole = true, bool disableCloseButton = true, uint32_t color = 0);

        /**
         * destroy the console
         */
        virtual ~Console();

	    /**
         * sets console title
         */
	    void setTitle(const String & title);

	    /**
         * returns console title
         */
	    String getTitle();

        /** 
         * shows/hides the console
         */
	    void show(bool show);

	    /**
         * sets output color
         */
	    void setColor(uint32_t color);

	    /**
         * sets output color
         */
	    void setPosition(uint32_t x, uint32_t y, uint32_t width, uint32_t height);

        /**
         * clear all output
         */
	    void clear();

	    /**
         * write output to the console
         */
	    void output(const String & text)
                { _output(text); }

    private:

	    /**
         * write output to the console
         */
	    void _output(const String & text);
    };
}
//===========================================================================================
#endif // __dylab_Console_h__
